package entidades.politica;

import java.util.ArrayList;

import util.exceptions.NaoExistemPeersSuficientesParaSeFazerTroca;

import entidades.Peer;

public abstract class PoliticaSelecaoVizinhos {
	
	protected ArrayList<Peer> listaPeers;
	
	/**
	 * Lista com os peers do sistema.
	 * 
	 * @param listaPeers
	 */
	public PoliticaSelecaoVizinhos(ArrayList<Peer> listaPeers) {
		this.listaPeers = listaPeers;
	}
	
	/**
	 * Seleciona um peer na lista de peers para fazer a troca com peerOrigem.
	 * O tipo de seleção depende da política adotada.
	 * 
	 * @param peerOrigem
	 * @return
	 * @throws NaoExistemPeersSuficientesParaSeFazerTroca 
	 */
	public abstract Peer seleciona(Peer peerOrigem) throws NaoExistemPeersSuficientesParaSeFazerTroca;
	
	/**
	 * Seleciona um peer na lista de peers para fazer a troca com Seed/Publisher.
	 * O tipo de seleção depende da política adotada.
	 * 
	 * @return
	 * @throws NaoExistemPeersSuficientesParaSeFazerTroca 
	 */
	public abstract Peer seleciona() throws NaoExistemPeersSuficientesParaSeFazerTroca;

}
